Passed
Pull Request — master (#28)
by Inumidun
01:30
created

Generate.js ➔ ???   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 6
Bugs 0 Features 6
Metric Value
cc 1
c 6
b 0
f 6
nc 1
dl 0
loc 5
rs 9.4285
nop 1
1
const path = require('path');
2
const fs = require('fs');
3
const jsonfile = require('jsonfile');
4
5
const baseDir = require('./baseDir');
6
const packages = require('../sample/dependencies');
7
8
/**
9
 * Auto generator for configuration files
10
 * @class Generate
11
 */
12
class Generate {
13
14
  /**
15
   * @param {String} extend - extend the pworking dorectory
16
   * Creates an instance of Generate.
17
   * @memberOf Generate
18
   */
19
  constructor(extend = '') {
20
    this.mainpath = path.join(__dirname, '../');
21
    this.filepath = `${baseDir.getCurrentWorkingDir()}/${extend}`;
22
    this.basename = baseDir.getCurrentDirectoryBase();
23
  }
24
25
  /**
26
   * webpack - Generate a webpack config file from the sample
27
   * @returns {Promise} if successful, resolves and pass in the
28
   * configuration as argument. Else reject and pass the error
29
   * @memberOf Generate
30
   */
31
  webpack() {
32
    return new Promise((resolve, reject) => {
33
      fs.readFile(
34
        path.join(this.mainpath, '/sample/webpack.config.sample'),
35
        (err, data) => {
36
          fs.writeFile(
37
            path.join(this.filepath, '/example/webpack.config.js'),
38
            data.toString(),
39
            (err) => {
40
              if (err) {
41
                return reject(err);
42
              }
43
              return resolve(data.toString());
44
            });
45
        });
46
    });
47
  }
48
49
  /**
50
   * babelrc - Generate a .babelrc file from the sample
51
   * @returns {Promise} if successful, resolves and pass in the
52
   * configuration as argument. Else reject and pass the error
53
   * @memberOf Generate
54
   */
55
  babelrc() {
56
    return new Promise((resolve, reject) => {
57
      fs.readFile(
58
        path.join(this.mainpath, '/sample/babelrc.sample'),
59
        (err, data) => {
60
          fs.writeFile(
61
            path.join(this.filepath, '/example/.babelrc'),
62
            data.toString(),
63
            (err) => {
64
              if (err) {
65
                return reject(err);
66
              }
67
              return resolve(data.toString());
68
            });
69
        });
70
    });
71
  }
72
73
  /**
74
   * package - Generate a package.json file
75
   * @param {Object} setupInfo - setup information provided by user
76
   * @returns {Promise} if successful, resolves and pass in the
77
   * configurations as argument. Else reject and pass the error
78
   * @memberOf Generate
79
   */
80
  package(setupInfo) {
81
    return new Promise((resolve, reject) => {
82
      let dependencies;
83
      const sortedDependencies = {};
84
      if (setupInfo.express === 'y' || setupInfo.express === 'yes') {
85
        dependencies = Object.assign(
86
          {},
87
          packages.dependencies,
88
          packages.express
89
        );
90
      } else {
91
        dependencies = packages.dependencies;
92
      }
93
94
      Object.keys(dependencies).sort().forEach((dependency) => {
95
        sortedDependencies[dependency] = dependencies[dependency];
96
      });
97
98
      const packageEx = {
99
        name: setupInfo.name,
100
        version: '1.0.0',
101
        description: (!setupInfo.description || setupInfo.description === '') ?
102
          '' : setupInfo.description,
103
        main: (!setupInfo.main || setupInfo.main === '') ?
104
          'index.js' : setupInfo.main,
105
        scripts: {
106
          test: ''
107
        },
108
        keywords: [],
109
        author: (!setupInfo.author || setupInfo.author === '') ?
110
          '' : setupInfo.author,
111
        license: (!setupInfo.license || setupInfo.license === '') ?
112
          'MIT' : setupInfo.license,
113
        dependencies: sortedDependencies,
114
        devDependencies: packages.devDependencies
115
      };
116
      jsonfile.writeFile(
117
        path.join(this.filepath, '/example/package.json'),
118
        packageEx, { spaces: 2 }, (err) => {
119
          if (err) {
120
            return reject(err);
121
          }
122
          return resolve(packageEx);
123
        });
124
    });
125
  }
126
127
  /**
128
   * eslintrc - Generate a .eslintrc file from the sample
129
   * @returns {Promise} if successful, resolves and pass in the
130
   * configuration as argument. Else reject and pass the error
131
   * @memberOf Generate
132
   */
133
  eslintrc() {
134
    return new Promise((resolve, reject) => {
135
      fs.readFile(
136
        path.join(this.mainpath, '/sample/eslintrc.sample'),
137
        (err, data) => {
138
          fs.writeFile(
139
            path.join(this.filepath, '/example/.eslintrc'),
140
            data.toString(),
141
            (err) => {
142
              if (err) {
143
                return reject(err);
144
              }
145
              resolve(data.toString());
0 ignored issues
show
Best Practice introduced by
There is no return statement in this branch, but you do return something in other branches. Did you maybe miss it? If you do not want to return anything, consider adding return undefined; explicitly.
Loading history...
146
            });
147
        });
148
    });
149
  }
150
151
  /**
152
   * all - Generates package.json, webpack.config.js, .eslintrc, .babelrc
153
   * @param {Object} setupInfo - setup information provided by user
154
   * @returns {Promise} if successful, resolves the promise.
155
   * Else reject and pass the error
156
   * @memberOf Generate
157
   */
158
  all(setupInfo) {
159
    return new Promise((resolve, reject) => {
160
      this.webpack().then(() => {
161
        this.eslintrc().then(() => {
162
          this.package(setupInfo).then(() => {
163
            this.babelrc().then(() => {
164
              resolve();
165
            });
166
          });
167
        });
168
      }).catch((err) => {
169
        reject(err);
170
      });
171
    });
172
  }
173
}
174
175
module.exports = Generate;
176